Multiprocessor systems use two or more central processing units (CPUs) within a single computer system. Multiprocessor systems have the ability to support more than one processor and/or the ability to allocate tasks between them. There are many variations on this basic theme. Multiprocessor systems may have multiple cores on one die, multiple dies in one package, multiple packages in one system unit, etc. Multiprocessor systems may execute multiple concurrent software processes in a system. To avoid race conditions, multiprocessor systems should synchronize access to data structures, regions of memory, or I/O devices.